
package modelo.fabricas;

import modelo.excepciones.YaHayUnaConstruccionTerrestreEnLaUbicacionDeseadaException;
import modelo.excepciones.YaHayUnaLineaDeTensionFuncionandoEnLaUbicacionDeseadaException;
import modelo.interfaces.ConstruibleTerrestre;
import modelo.mapa.Mapa;
import modelo.mapa.Ubicacion;
import modelo.servicios.LineaDeTension;

public class FabricaDeLineaDeTension {

    public LineaDeTension crearLineaDeTension(Ubicacion unaUbicacion) 
    {
        ConstruibleTerrestre construccionTerrestre = Mapa.getInstance().obtenerHectareaSegunUbicacion(unaUbicacion).obtenerConstruccionTerrestre();
        if(construccionTerrestre == null )
        {               
            LineaDeTension lineaDeTension = new LineaDeTension();
            Mapa.getInstance().obtenerHectareaSegunUbicacion(unaUbicacion).construccionTerrestre(lineaDeTension);//aca se contruye en la hectarea
            lineaDeTension.asignarUbicacion(unaUbicacion);
            return  lineaDeTension;
        }
        else
        {
            if(construccionTerrestre.obtenerRedElectricaALaQuePertenezco() != null)//Indica que es una linea de tension.
            {
                LineaDeTension lineaDeTension = (LineaDeTension)construccionTerrestre;
                if(lineaDeTension.estaDaniada())
                {
                    lineaDeTension.reparar();
                    return lineaDeTension;
                }
                else
                {
                    throw new YaHayUnaLineaDeTensionFuncionandoEnLaUbicacionDeseadaException();
                }
            }
            else
            {
                throw new YaHayUnaConstruccionTerrestreEnLaUbicacionDeseadaException();
            }                       
        }
    }
}